package com.hooya.fa.eu.biz.dao.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hooya.fa.eu.api.bo.PlatformZyInfoBO;
import com.hooya.fa.eu.api.bo.check.CheckProfitBO;
import com.hooya.fa.eu.api.bo.check.TempKcjlBO;
import com.hooya.fa.eu.api.bo.report.CostwayStkInfoBo;
import com.hooya.fa.eu.api.bo.report.CycleNumberBO;
import com.hooya.fa.eu.biz.dao.entity.TempKcjlDaily;
import com.hooya.fa.eu.biz.dao.entity.dto.StockQtyDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @Description 1
 * @Author : Zongz
 * @Copyright Copyright (c) 豪雅集团
 * @Create 2024/1/4
 * @Version 1.0.0
 */
@Mapper
@DS("fa_eu")
public interface TempKcjlDailyMapper extends BaseMapper<TempKcjlDaily> {

    void insertBatchSomeColumn(List<TempKcjlDaily> list);

	@DS("fa_eu_daily")
	void insertBatchSomeColumnDaily(List<TempKcjlDaily> list);


    /**
     * 获取时间周期的开始的产品数量和结束的产品数量（时间在sql中做处理）
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return
     */
    List<CycleNumberBO> getCycleNumberByDate(@Param("startDate") String startDate, @Param("endDate") String endDate);


	List<TempKcjlDaily> getOpeningInventory(@Param("date") String date, @Param("place") String place);

	@DS("fa_eu")
	List<TempKcjlDaily> getOpeningInventoryDaily(@Param("date") String date, @Param("place") String place);

    /**
     * 根据时间获取
     *
     * @param date
     * @return
     */
    @Select("select * from fa_eu.temp_kcjl_daily where date = #{date}")
    List<TempKcjlDaily> getListByDate(@Param("date") String date);

    /**
     * 校验对比库存记录
     *
     * @param date 日期
     * @return list
     */
    List<TempKcjlBO> checkAndContrastKcjl(@Param("date") String date);

    /**
     * 根据时间获取未使用过的货权costway/fds的sku的库存数据（即某一月未出现在stockList中）
     *
     * @param belongsList
     * @param startDate
     * @param endDate
     * @return
     */
    List<CostwayStkInfoBo> getNotUseBelongsSkuKcList(@Param("belongsList") List<String> belongsList,
                                                     @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取（三方/自营）平台库存的信息
     *
     * @param date              日期
     * @param thirdPlatformList 三方平台仓库
     * @param platform          平台 LOCAL/THIRD
     * @return list
     */
    List<PlatformZyInfoBO> getPlatformListByDate(@Param("date") String date,
                                                 @Param("thirdPlatformList") List<String> thirdPlatformList,
                                                 @Param("platform") String platform);

    /**
     * 获取历史转运数据
     *
     * @param date              日期
     * @param thirdPlatformList 三方平台仓库
     * @param platform          平台 LOCAL/THIRD
     * @return list
     */
    List<PlatformZyInfoBO> getHisLocalZyList(@Param("date") String date,
                                             @Param("thirdPlatformList") List<String> thirdPlatformList,
                                             @Param("platform") String platform);

    /**
     * 获取costway的数据【初始化用】
     *
     * @param date 日期
     * @return list
     */
    @Select("select * from fa_eu.temp_kcjl_daily where date = #{date} and belongs regexp 'COSTWAY-'")
    List<TempKcjlDaily> getCostwayListByDate(@Param("date") String date);

    /**
     * 特殊的转运记录【24年2月一批次从 PL 转到 DE 的数据，结果需要库存数据作证，即转移前是否有该原数据】
     *
     * @param date  日期
     * @param sku   sku
     * @param place 仓库
     * @return list
     */
    List<PlatformZyInfoBO> getSpecialZyList(@Param("date") String date, @Param("sku") String sku, @Param("place") String place);

    @Select("select cpbh, sum(sl) sl from temp_kcjl_daily where date = #{day} and belongs regexp 'costway' group by cpbh")
    List<TempKcjlDaily> getDailyCostwayList(String day);

    List<TempKcjlDaily> getPlaceListBySkuListAndDate(@Param("skuList") List<String> skuList, @Param("date") String date,
                                                     @Param("belongs") String belongs);

    @Select("SELECT cpbh, sum(sl) sl, belongs, date FROM temp_kcjl_daily " +
            "WHERE date IN (#{beforeDate}, #{afterDate}) AND belongs regexp 'costway' " +
            "group by cpbh, belongs, date")
    List<TempKcjlDaily> getCostwayListInDate(@Param("beforeDate") String beforeDate, @Param("afterDate") String afterDate);

    /**
     * 获取校验库存信息
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return list
     */
    List<CheckProfitBO> getCheckKcList(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 根据日期和仓库获取数据
     *
     * @param date      日期
     * @param placeList 仓库
     * @return list
     */
    List<TempKcjlDaily> getListByPlace(@Param("date") String date, @Param("placeList") List<String> placeList);

    List<StockQtyDTO> getBeginQty(@Param("preMonthEnd") String preMonthEnd);

	List<StockQtyDTO> getEndQty(@Param("curMonthEnd") String curMonthEnd);
}
